Virtualization is a technique in which a computer system is partitioned into multiple isolated virtual machines (VMs), each of which appears to the software within it to be a complete computer system. A conventional virtual machine manager (VMM) may run on a computer to present the abstraction of one or more VMs or guests to other software. Each VM may function as a self-contained platform that runs its own software stack, including an operating system (OS) and applications. Collectively this software stack is referred to as “guest software.”
Guest software running on a VM expects to operate as if it were running on a dedicated computer. For example, the guest software expects to control various computer operations and have access to physical (i.e., hardware) resources during these operations. The VMM controls which physical devices are assigned to each VM and also implements virtual devices which are visible to the VMs. If a physical device is fully assigned to a single VM, it is not available to the other VMs in the computer system. If a physical device is to be shared by more than one VM, the VMM typically implements a virtual device for each VM and arbitrates access of the virtual devices to the physical device.
USB 2.0 (Universal Serial Bus Revision 2.0 Specification, published 2002) is an external bus that supports data rates of up to 480 Mbps. USB 2.0 is an extension of USB 1.1 (Universal Serial Bus Revision 1.1 Specification, published 1996) and is fully compatible with USB 1.1. Current virtualization software solutions provide limited support for USB 2.0.